﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Dominio;
using Persistencia;
using LogicaNegocios.Exceptions;
using System.Data.SqlClient;


namespace LogicaNegocios.Manager
{
    public class VideoManager
    {
        private static VideoManager _manager;

        #region Singleton
        public static VideoManager GetManager()
        {
            if (_manager == null)
            {
                _manager = new VideoManager();
            }
            return _manager;
        }
        #endregion


        public void CrearVideo(Video video)
        {

            try
            {
                VideoPersistencia persistencia = new VideoPersistencia();

                Video existente = persistencia.GetVideo(video.FilePath);

                if (existente == null)
                {
                    persistencia.InsertarVideo(video);
                }
                else
                {
                    //throw new VideoException(VideoException.VIDEO_EXISTENTE);
                }
            }
            catch (SqlException)
            {
                throw new DBException(DBException.ERROR_DB);
            }
        }

        public void ModificarVideo(Video video)
        {
            try
            {
                VideoPersistencia persistencia = new VideoPersistencia();

                Video existente = persistencia.GetVideo(video.FilePath);

                if (existente != null)
                {
                    persistencia.ModificarVideo(video);
                }
                else
                {
                    throw new VideoException(VideoException.VIDEO_EXISTENTE);
                }
            }
            catch (SqlException)
            {
                throw new DBException(DBException.ERROR_DB);
            }
        }

        public void EliminarVideo (Video video)
        {
            try
            {
                VideoPersistencia persistencia = new VideoPersistencia();

                Video existente = persistencia.GetVideo(video.FilePath);

                persistencia.EliminarVideo(existente);

            }
            catch (SqlException)
            {
                throw new DBException(DBException.ERROR_DB);
            }
        }        

        public List<Video> GetVideos()
        {
            List<Video> videos= null;

            try
            {
                VideoPersistencia persistencia = new VideoPersistencia();
                videos = persistencia.GetAllVideos();
            }
            catch (SqlException)
            {
                throw new DBException(DBException.ERROR_DB);
            }

            return videos;
        }


        public List<Video> GetVideosByEvento(int idEvento)
        {
            List<Video> videos = null;

            try
            {
                VideoPersistencia persistencia = new VideoPersistencia();
                videos = persistencia.GetVideosByEvento(idEvento);
            }
            catch (SqlException)
            {
                throw new DBException(DBException.ERROR_DB);
            }

            return videos;
        }

        public void AsociarVideoEvento(int idVideo, int idEvento)
        {            
            try
            {
                VideoPersistencia persistencia = new VideoPersistencia();
                persistencia.InsertVideoEvento(idVideo, idEvento);
            }
            catch (SqlException)
            {
                throw new DBException(DBException.ERROR_DB);
            }            
        }

        public void EliminarVideoEvento(int idVideo, int idEvento)
        {
            try
            {
                VideoPersistencia persistencia = new VideoPersistencia();
                persistencia.EliminarVideoEvento(idVideo, idEvento);
            }
            catch (SqlException)
            {
                throw new DBException(DBException.ERROR_DB);
            }
        }
    }
}
